#ifndef PARSEUR_EVENT_H_INCLUDED
#define PARSEUR_EVENT_H_INCLUDED

#include "urt_struct.h"

// definition du resultat final !
// event correspond a un event_t
// data_index correspond soit a l'index de fin de ligne, soit a l'index de d�but d'arguments
// en gros a l'index+1 de data_index on trouve soit un \n soit des arguments de l'evenement !
// note : l'index par de la fin du temps
struct val_event {
	ushort event;
	ushort data_index;
};

// l'union permettant de sauvegarder soit un pointeur sur noeud soit le resultat final.
typedef union {
	struct val_event val_event;
	struct noeud * child;
}val_noeud;

/* voila la structure des noeud de l'arbre binaire de detection du type d'evenement.
 * Le principe est de comparer le caract�re num�ro index dans la chaine par raport a
 * la valeur comp. Si c'est inf�rieur on s'occupe de inf_is_val et inf_data sinon de
 * sup_is_val et sup_data ! inf_is_val et sup_is_val permette de connaitre si la data_index
 * est une valeur finale (val_event) ou un pointeur sur un autre noeud de l'arbre
 * binaire de recherche. Si on tombe sur une valeur alors on obtient le resultat de
 * notre recherche.
 * note : l'index par de la fin du temps
 */
struct noeud{
	int index;
	int comp;

	bool inf_is_val;
	val_noeud inf_data;

	bool sup_is_val;
	val_noeud sup_data;
};

// un arbre correspond a un pointeur de noeud
typedef struct noeud* arbre;

arbre* malloc_arbre();
arbre malloc_child();
void child_noeud(arbre a, int index, int comp);
void arbre_inf_set_val(arbre a, ushort event , ushort data_index );
void arbre_sup_set_val(arbre a, ushort event , ushort data_index );
void arbre_inf_set_noeud(arbre a, arbre noeud);
void arbre_sup_set_noeud(arbre a, arbre noeud);
void load_all_arbre(arbre* a);
void free_noeud( arbre a );
void free_arbre( arbre* a );

#endif // PARSEUR_EVENT_H_INCLUDED
